#此处的x,y为形参
def calc(x,y):
    res = x**y
    print(res)

a =5
b=4

#此处的a，b为实参，并且是固定参数
calc(a,b)

#默认参数
def fn(name,age,gj='cn'):
    print(f'名称：{name},年龄:{age},国籍：{gj}')


fn('郭杰',14)

#关键参数（指定参数）
fn(age=20,name='小福')

fn('ameilika',gj='en',age=40)  #此处ameilika为固定参数，gj和age为关键参数，固定参数位置不能变


#非固定参数

#args会把传入的参数变成一个元祖格式，此处args可以为任意名称
#kwargs会把传入的关键参数变为一个字典格式，此处kwargs可以为任意名称
def fn2(name,age,*args,**kwargs):
    print(name,age,args,kwargs)

fn2('小垃圾',20,'男',136123123131,add='山东',detail='详细地址')

#return
#一遇到return代表函数结束

def fn3(x,y):
    count = x*y
    if count<10:
        return count
    else:
        return count,x,y #此处以元组方式返回

print(fn3(10,20))

#传递列表和字典参数，相当于赋值操作


#内置函数
#len 获取长度
#id  获取内存地址
#abs 获取绝对值
print(abs(-10))
#all 全部为True时，返回True
a = [0,2,3,7,8]
print(all(a))
#any 任意一个为True,返回True
print(any(a))
#dict 生成一个字典
print(dict(name='guo',age=123))
#dir  打印当前程序的所有变量名
print(dir())
print(__file__)  #当前文件的地址
#list 生成一个列表
#locals 打印当前程序的所有变量名 & 变量值
print(locals())
#map  把列表里每一个元素扔给某个函数执行, 迭代器
l = list(range(20))

def getCount(f):
    return f*2

m = map(getCount,l)  #此处并不会执行，只有当循环m时，才会执行函数getCount。注意：此次只能用一个参数

for i in m:
    print(i)

#max 求最大值
arr = [0,1,2,3,4,5,6]
print(max(arr),'最大值')
#min 求最小值
print(min(arr),'最小值')
#open 文件操作
#ord  打印ascii字符对应的10进制数字
print(ord('<'))
#enumerate 循环时获取索引
for index,val in enumerate(arr):
    print(index,val)

#round 保留几位小数
print(round(3.12222,2))

#str 将任意数据转化为字符串
print(str(arr))

#type 获取类型
print(type(arr))

#zip  列表配对

arr2 = ['guo','jie','oo']
arr3 = ['fu','liu','hei','long']

for i in zip(arr2,arr3):
    print(i)  #arr2中多出来的数据并不会被打印

#filter  过滤列表中的元素
def fn3(x):
    if x >2:
        return x

for i in filter(fn3,arr):
    print(i)

#isdigit  判断是否为整数